package band.wukong.practice.util.mess;

/**
 * <p>Title: band.wukong.practice.util.mess.StringUtils.java</p>
 * <p>Description: String工具类</p>
 * <p>Date: 2008-10-13 上午09:16:36</p>
 *
 * @author sunjs
 */
public class StringUtils {

    /**
     * 返回一个字符串拷贝，非空并且去除两边空格
     *
     * @param s 源字符串
     * @return 非空并且去除两边空格字符串拷贝
     */
    public static String notNullAndTrim(String s) {
        if (null == s) {
            return "";
        } else {
            return s.trim();
        }
    }

    /**
     * 返回java.sql.Date的字符串表达
     *
     * @param date java.sql.Date。当date为null时，返回零长度字符串
     * @return 返回日期字符串拷贝，格式为yyyy-mm-dd
     */
    public static String notNull(java.sql.Date date) {
        if (null == date) return "";
        return date.toString();
    }

    /**
     * 返回Long的非空字符串表达
     *
     * @param num Long类型参数
     * @return Long的非空字符串拷贝
     */
    public static String notNull(Long num) {
        if (null == num) return "";
        return String.valueOf(num);
    }

    /**
     * 返回Integer的非空字符串表达
     *
     * @param num Integer类型参数
     * @return Integer的非空字符串拷贝
     */
    public static String notNull(Integer num) {
        if (null == num) return "0";
        else if (num.intValue() == 0) return "0";
        return String.valueOf(num);
    }

    /**
     * 返回Float的非空字符串表达
     *
     * @param num Float类型参数
     * @return Float的非空字符串拷贝
     */
    public static String notNull(Float num) {
        if (null == num) return "";
        else if (num.floatValue() == 0.0) return "";
        return String.valueOf(num);
    }

    /**
     * 返回非0字符串
     *
     * @param num Integer类型参数。当参数值为0时，返回零长度字符串
     * @return 返回字符串表达
     */
    public static String notZero(Integer num) {
        if (null == num || num.intValue() == 0) return "";
        return String.valueOf(num);
    }

    /**
     * 返回非0字符串
     *
     * @param num Long类型参数。当参数值为0时，返回零长度字符串
     * @return 返回字符串表达
     */
    public static String notZero(Long num) {
        if (null == num || num.longValue() == 0L) return "";
        return String.valueOf(num);
    }

    /**
     * 替换字符串
     *
     * @param s      要替换的字符串
     * @param source 源字符串
     * @param dest   替换源字符串的目标字符串
     * @return 替换后的字符串拷贝
     */
    public static String replace(String s, String source, String dest) {
        if (s == null)
            return ("");
        int pos;
        String tmpStr = s;
        String retStr = "";
        if (source == null || dest == null)
            return (retStr);
        while ((pos = tmpStr.indexOf(source)) >= 0) {
            retStr = retStr + tmpStr.substring(0, pos) + dest;
            tmpStr = tmpStr.substring(pos + source.length(), tmpStr.length());
        }
        retStr = retStr + tmpStr;
        return (retStr);
    }

    /**
     * 截取字符串
     *
     * @param s          需要截取的字符串
     * @param beginIndex 开始索引（从0开始）
     * @param endIndex   结束索引
     * @param defaultVal 默认返回值
     * @return 截取后的字符串拷贝
     */
    public static String substring(String s, int beginIndex, int endIndex, String defaultVal) {
        if (null == s || s.equalsIgnoreCase(""))
            return defaultVal;
        else if (endIndex > s.length())
            return s;
        else
            return s.substring(beginIndex, endIndex);
    }

    /**
     * 截取字符串, 返回需要截取的部分，被截掉的部分用...代替
     *
     * @param s          需要截取的字符串
     * @param beginIndex 开始索引（从0开始）
     * @param endIndex   结束索引
     * @return 截取后的字符串拷贝
     */
    public static String substring2(String s, int beginIndex, int endIndex) {
        if (null == s || s.equalsIgnoreCase(""))
            return "";
        else if (endIndex > s.length())
            return s;
        else
            return s.substring(beginIndex, endIndex) + "...";
    }

    /**
     * 将传入的字符串转换成字符串数组
     *
     * @param s         目标字符串
     * @param seperator 分隔符
     * @return 字符串数组
     */
    public static String[] split(String s, String seperator) {
        if (s == null || seperator == null) {
            return null;
        } else {
            return s.split(seperator);
        }
    }

    /**
     * 将传入的字符串转换成字符串数组
     *
     * @param s                 目标字符串
     * @param seperator         分隔符
     * @param invalideSeperator 有可能出现的不合法的分隔符，将被转换成合法的分隔符
     * @return 字符串数组
     */
    public static String[] split(String s, String seperator, String invalideSeperator) {
        if (s == null || seperator == null) {
            return null;
        } else {
            s = s.replaceAll(invalideSeperator, seperator);
            return s.split(seperator);
        }
    }

    public static void main(String[] args) {

    }

}
